package com.zshy.base.orm.contract.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.zshy.base.orm.annotation.OnCreate;
import com.zshy.base.orm.annotation.OnUpdate;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 基础参数
 *
 * @author zhouhengzhe
 * @version 1.0
 * @SortDefault(descs = "create_time") 代表默认按照create_time降序排序
 * @date 2023/11/7 12:45
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class BasePO implements Serializable {
    /**
     * 主键ID（雪花算法）
     */
    @TableId(type = IdType.ASSIGN_ID)
    private String id;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @OnCreate
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @OnCreate
    @OnUpdate
    private LocalDateTime updateTime;

    /**
     * 逻辑删除（1表示已删除，0表示未删除）
     *
     * @see com.zshy.base.core.contract.enums.DelFlagEnum
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @TableLogic
    private Integer delFlag;

    /**
     * 创建人编码
     * 由对应的业务端自己统一处理
     */
    private String createBy;

    /**
     * 创建人名称
     * 由对应的业务端自己统一处理
     */
    private String creator;

    /**
     * 更新人编码
     * 由对应的业务端自己统一处理
     */
    private String updateBy;

    /**
     * 更新人名称
     * 由对应的业务端自己统一处理
     */
    private String updater;
    /**
     * 租户ID
     */
    private String tenantId;

    public static final String ID = "id";
    public static final String CREATE_TIME = "create_time";
    public static final String UPDATE_TIME = "update_time";
    public static final String DEL_FLAG = "del_flag";
    public static final String CREATE_BY = "create_by";
    public static final String CREATOR = "creator";
    public static final String UPDATE_BY = "update_by";
    public static final String UPDATER = "updater";
}
